<?php

/*
 * Common functions
 */

function get_array_value($array, $key) {
    if (array_key_exists($key, $array)) {
        return $array[$key];
    } else {
        return '';
    }
}

function show_tabs() {
    global $requested_tab, $tabs_array;
    $tabs_array = include('GUI/Tabs/list.php');
    $tabs_array['install'] = '../install.php|Diegimas';
    $requested_tab = 'install';
}

require 'Init/common.php';
$tab = Addresing::get_requested_tab();
if ($tab) {
    $tab = str_replace(array('/', '.', '\\'), '', $tab);
    header("Location: index.php?$tab");
}
include 'Init/database.php';
include 'GUI/Functions/gui_functions.php';
include 'GUI/Design/MainDesign.php';


$page_title = "Diegimas";
$tabs = '';
$tabs_array = array();
$footer = '';
$sidebar_content = '';
add_mini_help('install');


/*
 * Request variables
 */

$dbhost = get_array_value($_POST, 'dbhost');
if (!$dbhost) {
    $dbhost = 'localhost';
}
$dbuser = get_array_value($_POST, 'dbuser');
$dbpass = get_array_value($_POST, 'dbpass');
$dbname = get_array_value($_POST, 'dbname');

$admin_user = get_array_value($_POST, 'admin_user');
if (!$admin_user) {
    $admin_user = 'pagrindinis';
}
$admin_pass = get_array_value($_POST, 'admin_pass');
$import_data = get_array_value($_FILES, 'import_data');

$root_dir = dirname(__FILE__);
$settings_file = "$root_dir/settings.php";

if (file_exists($settings_file)) {
    $database_installed = true;
}
ob_start();

/*
 * File permisions
 */


if (!is_writable("$root_dir/Cache")) {
    if (is_writable(sys_get_temp_dir())) {
        add_warning("Sistemai nėra suteiktos rašymo į katalogą <i>$root_dir/Cache</i> teisės.<br/>Diagramos bus rodomos, bet nebus naudojamas optimizavimas.");
    } else {
        add_error("Sistemai nėra suteiktos rašymo į katalogą <i>$root_dir/Cache</i> teisės.<br/>Linijinės diagramos nebus rodomos.");
    }
}

/*
 * Creating datasbase settings file
 */

if (!isset($database_installed) && $_POST) {
    $connected = $dbhost && $dbuser && $dbname && @mysql_connect($dbhost, $dbuser, $dbpass, $dbname);
    if ($connected) {
        /* Database */
        $dbhost_stripped = addslashes($dbhost);
        $dbuser_stripped = addslashes($dbuser);
        $dbpass_stripped = addslashes($dbpass);
        $dbname_stripped = addslashes($dbname);
        $settings_content = <<<PHP
<?php
return array(
    'DB_HOST'=>'$dbhost_stripped',
    'DB_USER'=>'$dbuser_stripped',
    'DB_PASSWORD'=>'$dbpass_stripped',
    'DB_DATABASE'=>'$dbname_stripped'
);
PHP;
        if (!@file_put_contents($settings_file, $settings_content)) {
            ?><b>Nepavyko įrašyti nustatymų failo. Nukopijuokite žemiau esantį tekstą:</b>
            <pre><?=  htmlspecialchars($settings_content);?></pre>
            <b>Ir išsaugokite failą: <i><?=  htmlspecialchars($settings_file);?></i></b>
            Išsaugojus nustatymų failą, dar kartą paspauskite įdiegti arba klavišą <i>F5</i>.
            <?
        } else {
            add_success("Prisijungimas prie duomenų bazės sėkmingai išsaugotas");
            $database_installed = true;
        }
        mysql_close();
    } else {
        add_error("Blogi prisjungimo prie duomenų bazės duomenys. Patiklinkite juos ir bandykite dar kartą.");
    }
}

if (isset($database_installed)) {
    DB::connect();
    /* Database tables */
    $sql_queries = file_get_contents("$root_dir/DB/initial.sql");
    foreach (explode("\n", $sql_queries) as $query) {
        mysql_query($query);
    }
}

/*
 * Login
 */

if (isset($database_installed)) {
    require 'Processing/Login/login_processing.php';
    if (mysql_result(mysql_query('SELECT COUNT(*) FROM users'), 0)) {
        $users_installed = true;
    }
}


if (isset($database_installed) && !isset($users_installed)) {
    if (!$admin_pass) {
        $admin_pass = '';
        for($i = 0; $i < 8; $i++) {
            $type = rand(0, 2);
            if ($type == 0) {
                $admin_pass .= chr(rand(65, 90));
            } else if ($type == 1) {
                $admin_pass .= chr(rand(97, 122));
            } else {
                $admin_pass .= chr(rand(48, 57));
            }
        }
        add_warning("Nebuvo įvestas slaptažodis. Sugeneruotas slaptažodis: <pre>$admin_pass</pre><br/>Jį galėsite pasikeisti <a href='?options' target='_blank'>Nustatymų</a> kortelėje");
    }
    require 'Processing/Users/users.php';
    if (newUser($admin_user, $admin_pass, $admin_pass)) {
        if (login($admin_user, $admin_pass, true)) {
            $users_installed = true;
        }
    }
}


/*
 * Importing XML data
 */

if (isset($database_installed)) {
    if (mysql_result(mysql_query('SELECT COUNT(*) FROM support_administration'), 0)) {
        $xsl_imported = true;
    }
}
     
if (!isset($xsl_imported) && isset($database_installed) && $_FILES) {
    /* File import */
    if(!isset($xsl_imported) && isset($_FILES['import_data']['tmp_name']) && $_FILES['import_data']['tmp_name']){
        require 'Processing/Import/all_data_import_processing.php';
        if (import_xsl_all($_FILES['import_data']['tmp_name'], $_FILES['import_data']['name'])) {
            add_success("Failas \"{$_FILES['import_data']['name']}\" sėkmingai suimportuotas");
            add_success("Sistema įdiegta sėkmingai");
            show_tabs();
            $full_installed = true;
            $xsl_imported = true;
        } else {
             add_error("Faile \"{$_FILES['import_data']['name']}\" nerasta nė viena importavimui tinkama kortelė.");
        }
    } else {
        add_error("Nenurodytas duomenų apie organizacijos struktūrą failas");
    }
}

if (isset($database_installed)) {
    DB::close();
}


/*
 * Representation
 */
if (!file_exists($settings_file) || !isset($xsl_imported) || !isset($users_installed)) {
?>
    <h1>Diegimas</h1>
    <form enctype="multipart/form-data" id="install" action="#" method="post">
        <? if (!file_exists($settings_file)) { ?>
            <h2>Prisijungimas prie mySQL duomenų bazės</h2>
            <div><input name="dbhost" id="dbhost" value="<?=$dbhost;?>" title="Pagal įdiegtą duomenų bazę. Pvz.: localhost, 192.168.1.3, mano.svetaine.lt"/><label for="dbhost">DB serveris:</label></div>
            <div><input name="dbuser" id="dbuser" value="<?=$dbuser;?>" title="Pagal įdiegtą duomenų bazę. Pvz.: jonas, root, guest"/><label for="dbuser">Prisijungimo vardas:</label></div>
            <div><input name="dbpass" id="dbpass" type="password" value="<?=$dbpass;?>" title="Pagal įdiegtą duomenų bazę."/><label for="dbpass">Slaptažodis:</label></div>
            <div><input name="dbname" id="dbname"  value="<?=$dbname;?>" title="Vienos iš sukurtų duomenų bazių pavadinimas"/><label for="dbname">DB pavadinimas:</label></div>
        <? } ?>

        <? if (!isset($users_installed)) { ?>
            <h2>Pagrindinis naudotojas</h2>
            <div><input name="admin_user" id="admin_user"  value="<?=$admin_user;?>" title="Sugalvotas vardas ilgesnis už 5 simbolius"/><label for="admin_user">Prisijungimo vardas:</label></div>
            <div><input type="password" name="admin_pass" id="admin_pass"  value="<?=$admin_pass;?>" title="Sugalvotas slaptažodis ilgesnis už 5 simbolius"/><label for="admin_pass">Slaptažodis:</label></div>
        <? } ?>

        <? if (!isset($xsl_imported)) { ?>
            <h2>Duomenys apie orgnaizacijos struktūrą</h2>
            <div><input type="file" name="import_data" id="import_data" value="<?=$dbhost;?>" title="Microsoft Excel failas, kuriame yra kortelės Paramoes priemonės, IS ir t.t."/><label for="import_data">Excel failas:</label></div>
        <? } ?>

            <div class="center">
                <input type="submit" value="Įdiegti" title="Įdiegus sistemą, galėsite peržiūrėti apkrovas bei atlikti kitus veiksmus"/>
            </div>
    </form>
<?
} else if (file_exists($settings_file) && isset($xsl_imported) && isset($users_installed) && !isset($full_installed)) {
    add_warning("Sistema jau yra įdiegta");
    show_tabs();
}


/*
 * Closing
 */

$main_content = ob_get_clean();
$help = "";
if (isset($helpHTML)) {
    $help = $helpHTML;
}
DB::close();
include 'GUI/Design/main_design.php';